#define _CRT_SECURE_NO_WARNINGS 1


//字符串旋转结果,写一个函数，判断一个字符串是否为另外一个字符串旋转之后的字符串。
//#include <stdio.h>
//#include <string.h>
//
//int Func(char* str1, char* str2)
//{
//	char tmp[256] = { 0 };
//	strcpy(tmp, str1);
//	strcat(tmp, str1);//拼接起来//AABCDAABCD//详见3.6作业
//	char* ret = strstr(tmp, str2);//在tmp中查找str2是否存在
//	if (ret != NULL)
//	{
//		return 1;
//	}
//	else
//	{
//		return 0;
//	}
//
//}
//
//int main()
//{
//	char* str1 = "AABCD";
//	char* str2 = "BCDAA";
//	int ret =Func(str1, str2);
//	printf("%d\n", ret);
//
//	return 0;
//}




//有一个数字矩阵，矩阵的每行从左到右是递增的，矩阵从上到下是递增的，请编写程序在这样的矩阵中查找某个数字是否存在。
//要求：时间复杂度小于O(N);(不允许一个一个比较)

//#include <stdio.h>
//#include <string.h>
////x:行 y:列 key你要找的关键字
//int FindNum(int arr[][3],int x,int y,int key)
//{
//	int i = 0;
//	int j = y - 1;
//	//i和j都合法，才能访问二维数组
//	while (i < x && j >= 0)
//	{
//		if (arr[i][j] < key)
//		{
//			i++;
//		}
//		else if (arr[i][j] > key)
//		{
//			j--;
//		}
//		else
//		{
//			return 1;
//		}
//	}
//	return 0;
//}
//int main()
//{
//	int arr[][3] = { {1,2,3},{4,5,6},{7,8,9} };
//	int ret = FindNum(arr, 3, 3, 7);
//	printf("%d\n", ret);
//	return 0;
//
//}


//猜凶手
//#include <stdio.h>
//int main()
//{
//	char killer;
//	for (killer = 'a'; killer <= 'd'; killer++)
//	{
//		if ((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd') == 3)
//		{
//			printf("%c\n", killer);
//		}
//	}
//	return 0;
//}


//杨辉三角形
//#include <stdio.h>
//void YangHui(int arr[][4], int n)
//{
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j <= i; j++)
//		{
//			if (i == j || j == 0)
//			{
//				arr[i][j] = 1;
//			}
//			else
//			{
//				arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
//			}
//		}
//	}
//}
//
//
//void PrintArr(int arr[][4], int n)
//{
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j <= i; j++)
//		{
//			printf("%d", arr[i][j]);
//		}
//		printf("\n");
//	}
//		
//}
//int main()
//{
//	int arr[4][4] = { 0 };
//	YangHui(arr, 4);
//	PrintArr(arr, 4);
//
//	return 0;
//}



//#include <stdio.h>
//int Add(int x, int y)
//{
//	return x + y;
//}
//int Sub(int x, int y)
//{
//	return x - y;
//}
//int Mul(int x, int y)
//{
//	return x * y;
//}
//int Div(int x, int y)
//{
//	return x / y;
//}
//
//void menu()
//{
//	printf("************************\n");
//	printf("*****1.Add    2.Sub*****\n");
//	printf("*****3.Mul    4.Div*****\n");
//	printf("*****0.exit        *****\n");
//	printf("************************\n");
//
//
//}
//
//int main()
//{
//	int input = 0;
//	int x = 0;
//	int y = 0;
//	int ret = 0;
//
//	//创建一个函数指针数组
//	int (*pfArr[5])(int, int) = { NULL,Add,Sub,Mul,Div };
//
//	do
//	{
//		menu();
//		printf("请选择");
//		scanf("%d", &input);
//		printf("请输入两个数");
//		scanf("%d %d", &x, &y);
//		ret = pfArr[input](x, y);
//		printf("%d\n", ret);
//	} while (input);
//
//	return 0;
//}


#include <stdio.h>
//pnum1 pnum2 用来存储 找到的数据 
void Find(int arr[], int len, int* pnum1, int* pnum2)
{
	//1. 整体数据进行异或
	int tmp = 0;
	for (int i = 0; i < len; i++)
	{
		tmp ^= arr[i];
	}
	//2. 去找1
	int pos = -1;
	for (int i = 0; i < 32; i++)
	{
		if (tmp & 1 == 1)//1&1=1其他为0
		{
			pos = i;//pos=0或者1,=0的1，3，5，=1的2，4，6
			break;
		}
		tmp = tmp >> 1;
	}
	//3. 分组 
	for (int i = 0; i < len; i++)
	{
		if ((arr[i] >> pos) & 1 == 1)//
		{
			*pnum1 ^= arr[i];//求出5
		}
		else
		{
			*pnum2 ^= arr[i];//求出6
		}
	}
}

int main()
{
	int arr[] = { 1,2,3,4,5,1,2,3,4,6 };//0001,0010,0011,0100,0101,0110
	int ret1 = 0;
	int ret2 = 0;
	Find(arr, sizeof(arr) / sizeof(arr[0]), &ret1, &ret2);
	printf("%d,%d\n", ret1, ret2);

	return 0;
}